<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
use Overtrue\Pinyin\Pinyin;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Bar>
 */
class BarFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        $faker = fake('zh_CN');

        // 真实的贴吧名称模板（分类：技术、设计、生活、娱乐等）
        $barNames = [
            // 技术类
            '前端开发', '后端开发', 'Python编程', 'Java技术', 'JavaScript',
            'React开发', 'Vue.js', 'Laravel框架', 'PHP开发', 'Go语言',
            '算法学习', '数据结构', '机器学习', '人工智能', '区块链技术',
            
            // 设计类
            'UI设计', 'UX设计', '平面设计', '插画设计', '摄影技巧',
            '产品设计', '交互设计', '建筑设计', '室内设计', '服装设计',
            
            // 生活类
            '美食分享', '旅行攻略', '健身运动', '读书交流', '电影推荐',
            '音乐分享', '游戏讨论', '宠物交流', '植物养护', '手工制作',
            
            // 学习类
            '英语学习', '编程学习', '考研交流', '留学经验', '技能提升',
            
            // 兴趣类
            '二次元', '动漫讨论', '小说推荐', '影视剧评', '追星日常',
            '球鞋文化', '潮流穿搭', '汽车之家', '数码产品', '摄影器材',
        ];

        // 真实的贴吧描述模板
        $descriptions = [
            '分享经验和技巧，共同学习进步',
            '讨论相关话题，交流心得体会',
            '寻找志同道合的朋友',
            '分享资源，共同成长',
            '学习交流，互帮互助',
            '记录成长，分享生活',
            '专业讨论，知识分享',
            '兴趣交流，快乐分享',
        ];

        $name = $faker->randomElement($barNames);
        // 使用拼音生成 slug
        $slug = \App\Models\Bar::generateSlug($name);

        return [
            'name' => $name,
            'slug' => $slug,
            'avatar' => null, // 使用默认头像（dicebear）
            'description' => $faker->randomElement($descriptions),
            'member_count' => 0, // 将在 Seeder 中更新
            'post_count' => 0,
            'owner_id' => User::inRandomOrder()->first()?->id ?? User::factory(), // 使用现有用户或创建新用户
        ];
    }

    /**
     * 设置贴吧名称
     */
    public function withName(string $name): static
    {
        return $this->state(fn (array $attributes) => [
            'name' => $name,
            'slug' => Str::slug($name),
        ]);
    }

    /**
     * 设置贴吧描述
     */
    public function withDescription(string $description): static
    {
        return $this->state(fn (array $attributes) => [
            'description' => $description,
        ]);
    }

    /**
     * 设置为热门贴吧（较多成员）
     */
    public function popular(): static
    {
        return $this->state(fn (array $attributes) => [
            'member_count' => fake()->numberBetween(500, 5000),
            'post_count' => fake()->numberBetween(100, 1000),
        ]);
    }
}
